
// 采用function关键字定义类
function Panda(name){
    // 在构造函数内通过 this 可以绑定实例属性
    this.name = name ;
    this.produce = function(){
        console.log( `我是${this.name}` );
    }
}

// 直接为类添加的属性就是静态属性
Panda.type = '熊猫' ;
// 静态属性应该通过类名来访问
console.log( Panda.type );
// 添加静态属性(只不过属性值是个函数)
Panda.show = function(){
    console.log( Panda.type );
}
// 调用静态函数
Panda.show();

let p = new Panda( '美美' );
console.log( p );
// 动态为实例添加属性
p.age = 5 ;
console.log( p );
// 不能通过类的实例访问类的静态属性
console.log( p.type ); // undefined
// p.show(); // TypeError: p.show is not a function

console.log( '- - - - - - - - - - - - - - - - - - - -' );

class Eagle {
    // 定义静态属性
    static type = '鹰';
    // 定义静态属性(只不过属性值是个函数)
    static show = function(){
        console.log( Eagle.type );
    }
    // 定义构造函数
    constructor(name){
        this.name = name ;
    }
    // 定义实例函数
    fly(){
        console.log( `${this.name}在空中翱翔` );
    }
}

let e = new Eagle( '老鹰' );
console.log( e );
e.fly();
// 不能用实例访问静态属性
console.log( e.type ); // undefined

// 访问静态属性
console.log( Eagle.type );
Eagle.show();

// 在 JavaScript 中定义的静态属性只能通过 类 来访问
// 这点与 Java 语言中可以通过 类的实例 访问 类变量 或 类方法 是不同的